home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 26 / AACD 26.iso / AACD / System / XFD / Developer / Sources / ASM / xfdExeHead.a < prev    next >
Encoding:
Text File  |  2001-09-16  |  4.3 KB  |  211 lines

  1. * Objectheader
  2. *
  3. *    Name:        xfdExeHead.a
  4. *    Author:        SDI
  5. *    Version:    $VER: xfdExeHead.a 1.6 (18.06.2000) by SDI
  6. *    Distribution:    PD
  7. *    Description:    XFD external test header (program startup code)
  8. *    Compileropts:    -
  9. *    Linkeropts:    -
  10. *
  11. * 1.0   03.02.98 : first version
  12. * 1.1   04.02.98 : fixed a lot bugs
  13. * 1.2   09.08.98 : one little bug-fix
  14. * 1.3   09.12.98 : added ExecBase passing
  15. * 1.4   08.01.99 : added type output
  16. * 1.4   23.02.99 : added V39 autoallocation feature
  17. * 1.5   24.11.99 : added lvo lines
  18. * 1.6   18.06.00 : now prints number of saved bytes.
  19.  
  20.         INCLUDE    "libraries/xfdmaster.i"
  21.         INCLUDE    "exec/memory.i"
  22.         INCLUDE    "dos/dos.i"
  23.  
  24.         INCLUDE    "lvo/exec_lib.i"
  25.         INCLUDE "lvo/dos_lib.i"
  26.  
  27.         MOVEA.L    A0,A5
  28.         MOVE.L    D0,D7            * store them
  29.  
  30.         * get dos library opened
  31.         MOVEQ    #33,D0
  32.         MOVEA.L    4.W,A6
  33.         LEA.L    DosName(PC),A1
  34.         JSR    _LVOOpenLibrary(A6)
  35.         TST.L    D0
  36.         BEQ.W    .NoDos
  37.         MOVEA.L    D0,A4            * A4 is DosBase
  38.  
  39.         * open source file
  40.         MOVEA.L    A4,A6
  41.         CLR.B    -1(A5,D7)        * clear return
  42.         MOVE.L    A5,D1
  43.         MOVE.L    #MODE_OLDFILE,D2
  44.         JSR    _LVOOpen(A6)
  45.         MOVE.L    D0,D6            * D6 is InFH
  46.         BEQ.W    .NoFH
  47.         MOVE.B    #'D',-1(A5,D7)        * create save name
  48.         CLR.B    (A5,D7)
  49.  
  50.         * seek to end and back to start --> get file size
  51.         MOVE.L    D6,D1
  52.         MOVEQ    #0,D2
  53.         MOVEQ    #OFFSET_END,D3
  54.         JSR    _LVOSeek(A6)
  55.         MOVE.L    D6,D1
  56.         MOVEQ    #0,D2
  57.         MOVEQ    #OFFSET_BEGINNING,D3
  58.         JSR    _LVOSeek(A6)
  59.         MOVEA.L    A6,A4
  60.         MOVE.L    D0,SourceSize
  61.  
  62.         * allocate memory
  63.         MOVEA.L    4.W,A6
  64.         MOVEQ.L    #MEMF_ANY,D1
  65.         JSR    _LVOAllocMem(A6)
  66.         MOVEA.L    A4,A6
  67.         MOVE.L    D0,SourceBuf
  68.         BEQ.W    .NoSourceBuf
  69.  
  70.         * read in buffer
  71.         MOVE.L    D6,D1
  72.         MOVE.L    D0,D2
  73.         MOVE.L    SourceSize(PC),D3
  74.         JSR    _LVORead(A6)
  75.         CMP.L    #-1,D0
  76.         BEQ.W    .noread
  77.  
  78.         * call recog functions
  79.         LEA.L    ForeMan(PC),A2
  80.         MOVEA.L    xfdf_FirstSlave(A2),A2
  81. .recogloop    MOVE.L    A2,D0                * for test purpose
  82.         BEQ.W    .notfound
  83.         MOVE.L    SourceSize(PC),D0
  84.         MOVEA.L    SourceBuf(PC),A0
  85.         LEA    xfdrr(PC),A1
  86.         MOVEA.L    xfds_RecogBuffer(A2),A3
  87.         JSR    (A3)
  88.         TST.L    D0
  89.         BNE.B    .found
  90.         MOVEA.L    xfds_Next(A2),A2
  91.         BRA.B    .recogloop
  92. .found        * call decrunch function
  93.         LEA    FormatStr(PC),A0
  94.         MOVE.L    A0,D1
  95.         LEA    xfds_PackerName(A2),A0
  96.         MOVE.L    A0,D2
  97.         JSR    _LVOVPrintf(A6)
  98.  
  99.         MOVE.W    xfds_PackerFlags(A2),D0
  100.         AND.W    #XFDPFF_USERTARGET,D0
  101.         BEQ.B    .CallDecr
  102.  
  103.         MOVEQ    #-1,D0                * no allocation possible
  104.         CMP.L    MinTargetLen(PC),D0
  105.         BEQ.B    .CallDecr
  106.  
  107.         MOVE.L    MinTargetLen(PC),D0
  108.         CLR.L    D1
  109.         MOVE.L    4.W,A6
  110.         JSR    _LVOAllocMem(A6)
  111.         MOVE.L    D0,UserBuf
  112.         BEQ.W    .notfound
  113.         MOVE.L    D0,TarBuf
  114.  
  115.         MOVE.W    #XFDFF_USERTARGET|XFDFF_MASTERALLOC,Flags
  116.         MOVE.L    MinTargetLen(PC),UserBufLen
  117.         MOVE.L    MinTargetLen(PC),TarLen
  118.         MOVE.L    FinalTargetLen(PC),TarSaveLen
  119.  
  120. .CallDecr    LEA    xfdbi(PC),A0
  121.         MOVEA.L    xfds_DecrunchBuffer(A2),A3
  122.         MOVE.L    4.W,-(A7)
  123.         LEA    -$3A(A7),A6        * create ExeBase ptr
  124.  
  125.         NOP
  126.         NOP    * for easier detection of jumpin in Debugger
  127.         NOP
  128.         NOP
  129.  
  130.         JSR    (A3)
  131.         MOVE.L    (A7)+,A6        * correct stack
  132.         TST.L    D0
  133.         BEQ.B    .notfound
  134.         MOVE.W    #XFDERR_OK,Error
  135.  
  136.         * open destination file
  137.         MOVEA.L    A4,A6
  138.         MOVE.L    A5,D1
  139.         MOVE.L    #MODE_NEWFILE,D2
  140.         JSR    _LVOOpen(A6)
  141.         MOVE.L    D0,D5            * D5 is OutFH
  142.         BEQ.B    .NoOutFH
  143.  
  144.         * write destination
  145.         MOVE.L    D5,D1
  146.         MOVE.L    TarBuf(PC),D2
  147.         MOVE.L    TarSaveLen(PC),D3
  148.         JSR    _LVOWrite(A6)
  149.  
  150.         MOVE.L    D3,-(A7)
  151.         LEA    Format2Str(PC),A0
  152.         MOVE.L    A0,D1
  153.         MOVE.L    A7,D2
  154.         JSR    _LVOVPrintf(A6)
  155.         ADDQ.L    #4,A7
  156.  
  157.         * close destination
  158.         MOVE.L    D5,D1
  159.         JSR    _LVOClose(A6)
  160. .NoOutFH    MOVEA.L    4.W,A6            * free decrunch buffer
  161.         MOVE.L    TarLen(PC),D0
  162.         MOVEA.L    TarBuf(PC),A1
  163.         JSR    _LVOFreeMem(A6)
  164.         CLR.W    Flags
  165. .notfound    TST.W    Flags            * free own buffer when error
  166.         BEQ.B    .noread            * occured
  167.         MOVE.L    UserBufLen(PC),D0
  168.         MOVEA.L    UserBuf(PC),A1
  169.         JSR    _LVOFreeMem(A6)
  170. .noread        MOVEA.L    4.W,A6            * free source buffer
  171.         MOVEA.L    SourceBuf(PC),A1
  172.         MOVE.L    SourceSize(PC),D0
  173.         JSR    _LVOFreeMem(A6)
  174. .NoSourceBuf    MOVEA.L    A4,A6            * close input fh
  175.         MOVEA.L    D6,D1
  176.         JSR    _LVOClose(A6)
  177. .NoFH        MOVEA.L    A4,A1            * close dos
  178.         MOVEA.L    4.W,A6
  179.         JSR    _LVOCloseLibrary(A6)
  180. .NoDos        MOVE.W    Error(PC),D0
  181.         RTS
  182.  
  183. xfdbi
  184. SourceBuf    DC.L    0
  185. SourceSize    DC.L    0
  186.         DC.L    0
  187.         DC.L    0
  188.         DC.W    XFDPFF_RELOC
  189. Error        DC.W    XFDERR_OK
  190. TarBuf        DC.L    0
  191.         DC.L    MEMF_ANY
  192. TarLen        DC.L    0
  193. TarSaveLen    DC.L    0
  194.         DC.L    0,0,0
  195. Flags        DC.W    0
  196.         DC.W    0
  197.         DC.L    0,0
  198. UserBuf        DC.L    0
  199. UserBufLen    DC.L    0
  200.         DC.L    0    * MinSourceLen
  201.  
  202. xfdrr
  203. MinTargetLen    DC.L    0
  204. FinalTargetLen    DC.L    0
  205.         DC.L    0
  206. DosName     DC.B    "dos.library",0
  207. FormatStr    DC.B    'Cruncher-Name: %s',10,0
  208. Format2Str    DC.B    'Saved %ld bytes.',10,0
  209.         EVEN
  210.  
  211.